#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <iostream>
#include <QDebug>
#include <QFile>
#include <QFileDialog>
#include <QTextCodec>
#include <QList>
#include <QShortcut>
#include <QMessageBox>

QT_BEGIN_NAMESPACE//防止冲突，对应会替换成对应的namespace
namespace Ui {
//类似暴露自己出去使用
class Widget; }
QT_END_NAMESPACE
//被暴露的对象，作为qweight的子类，使用qobject的定义，来获得一些定义的变量
// 这个本质上也是对widget:ui的持有，是qt框架完成
class Widget : public QWidget
{
    Q_OBJECT

public:
    //约定同一时间，只修改一个文本，那么我们持有这个一个文件
    QFile file;
    QString orgText;//原始文本

    Widget(QWidget *parent = nullptr);
    ~Widget();

// 重写一些事件
public:
    void enterEvent(QEvent *event) override;
    void closeEvent(QCloseEvent *event) override;
//    void wheelEvent(QWheelEvent *event) override;
    // 事件过滤器

protected:
     bool eventFilter(QObject *obj, QEvent *ev) override;


private slots:
    // 通过界面，生成的槽声明，接着在cpp下实现
    void on_btnOpen_clicked();
    //自己定义的方式
//    void on_btnOpen_clickedMySelf()
//    {
//        std::cout << "自定义connect方式" << std::endl;
//    }

    void on_btnSave_clicked();
    void on_btnClose_clicked();

    void oncurrentIndexChanged(QString text);

    void onCursorPositionChanged();

    // 自定义的槽，请在 slots下面定义，槽需要实现
    void myslot();
    void myslotParams(int value);



//又持有自己暴露出去的qt空间下的引用
private:
    Ui::Widget *ui;



 /*

 自定义信号与槽位，在qt中，你只要使用signals关键字就可以定一个信号
 只要声明，不要实现
*/
signals:
    // 自定义的信号 只申明不实现,这个是不带参数的版本
       void mysignal();
       //定义带参数的版本
       void mysignalParam(int value);

};
#endif // WIDGET_H
